package MT;


import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;

public class MT2023_10_02 {


    /**
     * 2.
     * 正则序列
     * 我们称一个长度为n的序列为正则序列，当且仅当该序列是一个由1~n组成的排列，即该序列由n个正整数组成，取值在[1,n]范围，且不存在重复的数，同时正则序列不要求排序
     *
     * 有一天小团得到了一个长度为n的任意序列s，他需要在有限次操作内，将这个序列变成一个正则序列，每次操作他可以任选序列中的一个数字，并将该数字加一或者减一。
     *
     * 请问他最少用多少次操作可以把这个序列变成正则序列？
     *
     * 数据范围：
     * 1
     * ≤
     * n
     * ≤
     * 20000
     *
     * 1≤n≤20000 ，
     * 0
     * ≤
     * a
     * b
     * s
     * (
     * s
     * i
     * )
     * ≤
     * 10000
     *
     * 0≤abs(s
     * i
     * ​
     *  )≤10000
     * 进阶：时间复杂度
     * O
     * (
     * n
     * )
     *
     * O(n) ，空间复杂度
     * O
     * (
     * n
     * )
     *
     * O(n)
     * 时间限制：C/C++ 1秒，其他语言2秒
     * 空间限制：C/C++ 256M，其他语言512M
     * 输入描述：
     * 输入第一行仅包含一个正整数n，表示任意序列的长度。(1<=n<=20000)
     *
     * 输入第二行包含n个整数，表示给出的序列，每个数的绝对值都小于10000。
     *
     * 输出描述：
     * 输出仅包含一个整数，表示最少的操作数量。
     *
     * 示例1
     * 输入例子：
     * 5
     * -1 2 3 10 100
     * 输出例子：
     * 103
     * @param args
     */

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int size1 = scanner.nextInt();

        int[] arr = new int[size1];
        for (int i = 0; i < size1; i++) {
            arr[i] = scanner.nextInt();
        }

        //创建一个计算操作次数函数
        System.out.println(count(arr));

    }

    private static int count(int[] arr) {

        //1.创建Hash
        int[] set = new int[arr.length];

        int count = 0;

        //数组排序
        Arrays.sort(arr);

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] - i - 1  != 0){
                count += Math.abs(arr[i] - i -1);
            }
        }

        return count;
    }


}
